//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#pragma package(smart_init)
#pragma link "CAlexMaker"

//---------------------------------------------------------------------------
#include "eListe.h"
//---------------------------------------------------------------------------
//              Constructeur
//---------------------------------------------------------------------------
__fastcall CEListe::CEListe(char * cLogiciel,
                            char * cVersion,
                            int nLogiciel,
                            int nVersion )

{
    try {
        bPremierCateg1 = false;
        nCateg1 = 0;

        bPremierCateg2 = false;
        nCateg2 = 0;

        nRef = 0;
        nLien = 0;

        m_asLogiciel = (AnsiString) cLogiciel;
        m_asVersion  = (AnsiString) cVersion;

        cLogiciel = NULL;
        cVersion  = NULL;

        m_asRequete  = DefinirRequete(nLogiciel, nVersion);

        // La GED est desactivée
        //----------------------
        gGestionEnvoiGED             = false;

        amListe                      = new CAlexMaker((TComponent*)0);
        amListe->OnFirstPageHeader   = EvPageHeader;
        amListe->OnPageHeader        = EvPageHeader;
        amListe->OnStartEtatEvent    = EvStartEtatEvent;
        amListe->OnBandeDebutSection = EvDebutSection;
        amListe->OnBandeDetail       = EvDetail;

        amListe->DocList->Clear();
        amListe->DocList->Add(  IncludeTrailingBackslash(IncludeTrailingBackslash(ExtractFilePath( ParamStr(0) ))+"Etat")+LISTE_REFERENCE );
    }catch( Exception &e ) {
        EIC_DISPLAY_EXCEPTION(e);}
}
//---------------------------------------------------------------------------
//              Destructeur
//---------------------------------------------------------------------------
__fastcall CEListe::~CEListe()
{
    try {
        if (amListe) { delete amListe; amListe = NULL; }
    } catch( Exception &e ) {
        EIC_DISPLAY_EXCEPTION( e); }
}
//---------------------------------------------------------------------------
//                      En-tete
//---------------------------------------------------------------------------
bool __fastcall CEListe::EvPageHeader( TBandeUser *Bande )
{
    bool bRetour = true;
    try {
        Bande->GetChamp("TypeBloc")->Valeur = "WebHelp";
        Bande->GetChamp("Logiciel")->Valeur = m_asLogiciel;
        Bande->GetChamp("Version")->Valeur  = m_asVersion;

    } catch( Exception &e ) {
        EIC_DISPLAY_EXCEPTION( e);
        bRetour = false;}
    return(bRetour);
}
//---------------------------------------------------------------------------
//                          titre
//---------------------------------------------------------------------------
bool __fastcall CEListe::EvDebutSection( TBandeUser *Bande )
{
    bool bRetour = true;
    try {
        if((bool)Bande->GetChamp("chptest")->Valeur)
            Bande->GetChamp("Titre")->Valeur = "Liste des références WebHelp qui n'ont pas de lien";
        else
            Bande->GetChamp("Titre")->Valeur = "Liste des liens qui n'ont pas de référence WebHelp";
    }catch( Exception &e ) {
        EIC_DISPLAY_EXCEPTION( e);
        bRetour = false;}
    return(bRetour);
}
//---------------------------------------------------------------------------
//                      lancer la Requete sql
//---------------------------------------------------------------------------
bool   __fastcall  CEListe::EvStartEtatEvent(TEtatUser *Etat)
{
    bool bRetour = true;
    try {
        Etat->SQL = m_asRequete;
    }catch( Exception &e ) {
        EIC_DISPLAY_EXCEPTION( e);
        bRetour = false;}
     return bRetour;
}
//---------------------------------------------------------------------------
//                      Lancement de l'écriture dans l'état
//---------------------------------------------------------------------------
bool __fastcall CEListe::EvDetail( TBandeUser *Bande )
{
    bool bRetour = true;
    try {
        if((bool)Bande->GetChamp("chptest")->Valeur)
            Bande->GetChamp("data")->Valeur = Bande->GetChamp("chpreference")->Valeur;
        else
            Bande->GetChamp("data")->Valeur = Bande->GetChamp("chplien")->Valeur;
    }catch( Exception &e ) {
        EIC_DISPLAY_EXCEPTION( e);
        bRetour = false;}
     return bRetour;
}
//---------------------------------------------------------------------------
//                      Edition (Affichage ou Impréssion)
//---------------------------------------------------------------------------
void __fastcall CEListe::Edition( bool bVisu )
{
    try {
        if(bVisu)
            amListe->Preview();
        else
            amListe->Print();
    } catch( Exception &e ) {
        EIC_DISPLAY_EXCEPTION( e);}
}
//---------------------------------------------------------------------------
//          Méthode permettant de retourner la requete SQL
//---------------------------------------------------------------------------
AnsiString __fastcall CEListe::DefinirRequete(const int &nLogiciel, const int &nVersion)
{
    return (AnsiString) "(SELECT lower( refer.ref_nom ) reference,"+
                                "lower( lien.lien_ref ) lien,"+
                                "(LENGTH( lower( refer.ref_nom ) ) IS NOT NULL)test "+
                        "FROM refer "+
                            "LEFT OUTER JOIN lien ON ( (refer.log_code = lien.log_code) "+
                                                "AND (refer.ver_code = lien.ver_code)   "+
                                                "AND (refer.ref_nom = lien.lien_ref) )  "+
                        "WHERE refer.log_code = "+nLogiciel+" AND refer.ver_code ="+nVersion+
                            " AND lien.lien_ref IS NULL "+
                        "ORDER BY refer.ref_nom) "+

                        "UNION "+

                        "(SELECT lower( refer.ref_nom ) reference,"+
                                "lower( lien.lien_ref ) lien,"+
                                "(LENGTH( lower( refer.ref_nom ) ) IS NOT NULL)test "+
                        "FROM lien "+
                            "LEFT OUTER JOIN refer ON ( (refer.log_code = lien.log_code) "+
                                                 "AND (refer.ver_code = lien.ver_code)   "+
                                                 "AND (refer.ref_nom = lien.lien_ref) )  "+
                        "WHERE lien.log_code ="+nLogiciel+" AND lien.ver_code ="+nVersion+
                            " AND refer.ref_nom IS NULL)"; 
}
//---------------------------------------------------------------------------
//                         Fonction exportée
//---------------------------------------------------------------------------
void WH_EditRef(char * cLogiciel,
                char * cVersion,
                int nLogiciel,
                int nVersion,
                bool bVisu)
{
    CEListe * ListEtat = NULL;
    try {
        ListEtat = new CEListe(cLogiciel,cVersion,nLogiciel,nVersion);
        ListEtat->Edition(bVisu);
    } catch(Exception &e) {
        EIC_DISPLAY_EXCEPTION( e);
        ListEtat = NULL;}
    if (ListEtat) { delete ListEtat; ListEtat = NULL; }
}
//---------------------------------------------------------------------------
